#!/usr/bin/python
# -*- coding: utf-8 -*-
# @name             : 程序主文件
# @author           : OneYoung
# @create           : 2024/02/04
# @version          : v1.0
# @desc             : 主程序封装,可通过命令行执行

import typer
import unittest
from utils.log_record import logger
from unittestreport import TestRunner
from scripts.create_case.main import CreateCase
from scripts.create_pages.main import CreatePages
from application.settings import *

shell = typer.Typer()


@shell.command()
def run_test():
    """ 执行测试用例,生成测试报告,发送邮件及消息通知 """

    logger.info("********TEST START********")
    # 用例集
    discover = unittest.defaultTestLoader.discover(CASE_DIR, pattern="test*.py")
    # 执行测试用例,生成测试报告
    runner = TestRunner(discover, **REPORT_CONFIG)
    runner.run(**RUNNING_CONFIG)
    # 发送邮件
    if EMAIL_ENABLE:
        logger.info('发送测试报告邮件...')
        runner.send_email(**EMAIL_CONFIG)
    # 发送消息通知
    if DING_ENABLE:
        logger.info('发送钉钉消息...')
        runner.dingtalk_notice(**DING_CONFIG)
    if WECHAT_ENABLE:
        logger.info('发送企微消息...')
        runner.weixin_notice(**WECHAT_CONFIG)
    # 用例执行完成
    logger.info("*********TEST END*********")


@shell.command()
def init_pages(path: str):
    """
    自动创建 pages 结构

    命令例子: python main.py init-pages user/list

    :param path: pages路径,根目录为 website/pages,填写后面的路径即可,如: user/list
    :return:
    """

    event = CreatePages(path)
    event.run()


@shell.command()
def init_case(path: str):
    """
    自动创建 testCase 用例模板

    命令例子: python main.py init-case user/list

    :param path: 用例存放路径,根目录为 website/test_cases,填写后面的路径即可,如: user/list
    :return:
    """

    event = CreateCase(path)
    event.run()


if __name__ == '__main__':
    # run_test()  # 运行用例
    # init_pages('user/list')  # 初始化页面包
    # init_case('user/list')  # 初始化测试用例
    shell()  # 命令行运行
